package com.onlygx.dva.common.utils;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 瞳见科技
 *
 * @author : GaoXiang
 * 时间 : 2022/1/17
 * 介绍 :
 */
public class DateUtils {

    /**
     * 获取当年的开始时间
     * 时间 2022年3月30日10:42:39 创建 高祥
     */
    public static Date nowYearBeganTime() {
        return DateUtil.beginOfYear(new Date());
    }

    /**
     * 获取当年的结束时间
     * 时间 2022年3月30日10:42:39 创建 高祥
     */
    public static Date nowYearEndTime() {
        return DateUtil.endOfYear(new Date());
    }


    /**
     * 获取当前月的开始时间
     * 时间 2022年1月17日10:58:59 创建 高祥
     */
    public static Date nowMonthBeganTime() {
        return DateUtil.beginOfMonth(new Date());
    }

    /**
     * 获取当前月的结束时间
     * 时间 2022年1月17日10:58:59 创建 高祥
     */
    public static Date nowMonthEndTime() {
        return DateUtil.endOfMonth(new Date());
    }

    /**
     * 获取上个月的开始时间
     * 时间 2022年1月17日10:58:59 创建 高祥
     */
    public static Date lastMonthBeganTime() {
        return DateUtil.beginOfMonth(DateUtil.lastMonth());
    }

    /**
     * 获取上个月的结束时间
     * 时间 2022年1月17日10:58:59 创建 高祥
     */
    public static Date lastMonthEndTime() {
        return DateUtil.endOfMonth(DateUtil.lastMonth());
    }

    /**
     * 计算应用到期时间
     *
     * @param oldTime       之前的到期时间
     * @param chargingId    定价方式
     * @param chargingCount 当前定价方式的购买数量
     */
    public static Date calculateEndTime(Date oldTime, String chargingId, Integer chargingCount) {
        //之前没买过
        if (ObjectUtil.isNull(oldTime)) {
            oldTime = new Date();
        } else {
            //旧的到期时间大于当前时间
            if (oldTime.compareTo(new Date()) > 0) {

            } else {
                oldTime = new Date();
            }
        }
        return calculateTime(oldTime, chargingId, chargingCount);
    }

    public static Date calculateTime(Date time, String chargingId, Integer chargingCount) {
        Date date = null;
        if ("1".equals(chargingId)) {//包月
            date = DateUtil.offsetMonth(time, chargingCount);

        } else if ("2".equals(chargingId)) {//包年
            date = DateUtil.offset(time, DateField.YEAR, chargingCount);

        } else if ("3".equals(chargingId)) {//按次
            date = DateUtil.offset(time, DateField.YEAR, 500);
        }
        return date;
    }

    /**
     * 获取软件时间套餐名称
     * 2022-3-25 09:31:45 创建 高祥
     */
    public static String calculateChargingStr(String chargingId){
        if(StrUtil.isEmpty(chargingId)){
            return "内部套餐";
        }
        String name = "";
        if ("1".equals(chargingId)) {//包月
            name = "包月";

        } else if ("2".equals(chargingId)) {//包年
            name = "包年";

        } else if ("3".equals(chargingId)) {//按次
            name = "按次";
        }
        return name;
    }

    /**
     * 获取startDate日期后month月的日期
     * @param startDate 开始日期
     * @param month  几个月后
     * @return
     */
    public static Date getMonthDate(Date startDate,int month){
        LocalDateTime localDateTime = startDate.toInstant()
                .atZone(ZoneId.systemDefault() )
                .toLocalDateTime().minusMonths(month);
        Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant());
        return date;
    }

    /**
     * 获取startDate日期后day天的日期
     * @param startDate 开始日期
     * @param day  几天
     * @return
     */
    public static Date getDayDate(Date startDate,int day){
        LocalDateTime localDateTime = startDate.toInstant()
                .atZone(ZoneId.systemDefault() )
                .toLocalDateTime().minusDays(day);
        Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant());
        return date;
    }


    /**
     *
     * 马正祥
     */
    public static List<String> getLast12Months() {
        return getLastMonths(12);
    }

    /**
     *
     * 马正祥
     */
    public static List<String> getLastMonths(int count) {
        LocalDate today = LocalDate.now();
        ArrayList<String> list = new ArrayList<>();
        for (int i = 1; i <= count; i++) {
            LocalDate localDate = today.minusMonths(i - 1);
            String format = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
            format += "-00";
            list.add(format);
        }
        return list;
    }

    /**
     *
     * 马正祥
     */
    public static List<String> getLast12Months(int count) {
        LocalDate today = LocalDate.now();
        ArrayList<String> list = new ArrayList<>();
        for (int i = 1; i <= count; i++) {
            LocalDate localDate = today.minusMonths(i - 1);
            String format = localDate.format(DateTimeFormatter.ofPattern("yyyy.MM"));
            list.add(format);
        }
        return list;
    }

    /**
     *
     * 马正祥
     */
    public static List<String> getLastDays(int count) {
        LocalDate today = LocalDate.now();
        ArrayList<String> list = new ArrayList<>();
        for (int i = 1; i <= count; i++) {
            LocalDate localDate = today.minusDays(i - 1);
            String format = localDate.format(DateTimeFormatter.ofPattern("MM.dd"));
            list.add(format);
        }
        return list;
    }

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = getDayDate(new Date(),7);
        System.out.println("前一个月的时间:"+sdf.format(date));
    }


}
